(7) FACET

COLUMN

DIFINISI

Faceting adalah sebuah teknik dalam ggplot yang memisahkan plot berdasarkan kategorikal variable tambahan yang sudah kita buat.

Terdapat dua macam fungsi facet, pertama facet_wrap() dan kedua adalah facet_grid(). Pada contoh di bawah adalah penggunaan faceting dengan fungsi facet_wrap()

df3 %>%
  mutate(kelompok = case_when(tahun %in% c(1949:1951) ~ "Tahun 1949-1951",
                              tahun %in% c(1952:1954) ~ "Tahun 1952-1954",
                              tahun %in% c(1955:1957) ~ "Tahun 1955-1957",
                              TRUE ~ "Tahun 1958-1960")) %>% 
  mutate(bln = as.character(factor(bulan, levels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                                                   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
                                   labels=1:12))) %>% 
  mutate(myd = my(paste0(bln,"-",tahun))) %>% 
  ggplot(aes(x=myd, y=penumpang, group =1))+
  geom_point(aes(color = tahun), size = 3)+
  geom_smooth(se=F)+
  scale_x_date(date_labels = "%Y",
               breaks = seq(ymd("1949-07-01"), ymd("1960-07-01"), by = "1 year"),
               name = "Tahun")+
  coord_polar("x")+
  guides(color = "none")+
  facet_wrap(~kelompok, nrow = 2, scale = "free")

COLUMN

CONTOH

(6) COORDINATE SYSTEM

COLUMN

DIFINISI

Coordinate system dengan posisi pada aesthetic akan sangat terkait dimana keduanya akan membentuk sebuah plot. Terdapat dua type coordinate system :

Linear coordinate system yang terdiri atas

  • coord_cartesian(): Settingan default Cartesian coordinate system
  • coord_flip(): Cartesian coordinate system dengan sumbu x and y saling menggantikan.
  • coord_fixed(): Cartesian coordinate system dengan aspect ratio yang fixed.

Non linear coordinate system yang dapat merubah bentuk dari plot itu sendiri. Terdiri atas:

  • coord_map()/coord_quickmap()/coord_sf(): Dipakai pada pemetaan peta.
  • coord_polar(): Polar coordinates.
  • coord_trans()

Berikut adalah contoh penggunaan coordinate system dengan coord_polar()

df3 %>% 
  mutate(bln = as.character(factor(bulan, 
  levels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
  labels=1:12))) %>% 
  mutate(myd = my(paste0(bln,"-",tahun))) %>% 
  ggplot(aes(x=myd, y=penumpang, group =1))+
  geom_point(aes(color = tahun), size = 3)+
  geom_smooth(se=F)+
  scale_x_date(date_labels = "%Y",
               breaks = seq(ymd("1949-07-01"), ymd("1960-07-01"), by = "1 year"),
               name = "Tahun")+
  coord_polar("x")+
  guides(color = "none")

COLUMN

SEBELUM

SESUDAH

(5) SCALE

COLUMN {data-width = “300”}

DIFINISI

Perlu diketahui bahwa setiap aestetic pada ggplot terasosiasi dengan scale, Seperti pada contoh di bawah, dimana aestetic yang disertakan adalah x, y, dan color

df3 %>% 
  ggplot(aes(x=bulan, y=penumpang))+
  geom_point(aes(color = tahun, size=tahun))+
  scale_color_brewer()+
  scale_x_discrete()+
  scale_y_continuous()

Pada layer scale ini, kita bisa berkreasi untuk memberikan penekanan pada atribut tersebut agar lebih dominan.

Penekanan pada linetype, warna dan shape

df3 %>% 
  ggplot(aes(x=bulan, y=penumpang))+
  geom_line(data = . %>% mutate(max= tahun == 1960), aes(linetype = max, group = tahun))+
  geom_point(data = . %>% mutate(max= tahun == 1960), aes(color = max, shape = max), size = 3.5)+
  scale_linetype_manual(breaks = c(F,T),
                        values = c("blank","solid"),
                        labels = c("< 1960","1960"))+
  scale_color_manual(breaks = c(F,T),
                     values = c("lightblue","darkred"),
                     labels = c("< 1960","1960"))+
  scale_shape_manual(breaks = c(F,T),
                     values = c(1,17),
                     labels = c("< 1960","1960"))+
  labs(color = "Tahun", shape = "Tahun", linetype = "Tahun")

COLUMN {data-width = “700”}

HASIL PLOT

(4) STATISTICS (STAT)

Column

DIFINISI STAT

stat adalah kependekan dari statistic, dimana variabel-variable statistik dibentuk dengan fungsi stat ini. Dalam ggplot, penggunaan fungsi ini diibaratkan kita menambahkan layer statistik pada plot yang akan kita buat tanpa perlu kita siapkan kalkulasinya terlebih dahulu.

Beberapa fungsi stat_() dapat dilihat sebagai berikut di bawah, dan sesungguhnya fungsi ini sudah ada di dalam fungsi geom_() yang sering kita pakai.

  • stat_bin(): geom_bar(), geom_freqpoly(), geom_histogram()
  • stat_bin2d(): geom_bin2d()
  • stat_bindot(): geom_dotplot()
  • stat_binhex(): geom_hex()
  • stat_boxplot(): geom_boxplot()
  • stat_contour(): geom_contour()
  • stat_quantile(): geom_quantile()
  • stat_smooth(): geom_smooth()
  • stat_sum(): geom_count()

Ada dua cara menggunakan layer stat ini, pertama kita tambahkan geom_() function terlebih dahulu lalu stat_()

df3 %>% 
  ggplot(aes(x= bulan, y=penumpang))+
  geom_point()+
  geom_line(stat = "summary", fun = "median", group = 1, color = "red")

Atau, kita tambahkan stat_() kemudian geom_()

df3 %>% 
  ggplot(aes(x= bulan, y=penumpang))+
  geom_point()+
  stat_summary(fun.data = median_hilow, geom = "line", group = 1, color = "blue")

TANPA FUNGSI STAT_()

Tanpa menggunakan fungsi stat_() maka line code akan panjang.
stat_penumpang <- df3 %>% 
                    group_by(bulan) %>% 
                    summarise(mean = mean(penumpang),
                              median = median(penumpang),
                              se = sd(penumpang)/sqrt(n()),
                              max = mean + se,
                              min = mean - se,
                              N = n(),
                              .groups = "drop")

df3 %>% 
  ggplot(aes(x=bulan, y=penumpang))+
  geom_point(alpha = 0.5)+
  geom_errorbar(data=stat_penumpang, aes(y=mean, ymin = min, ymax=max), color = "blue")+
  geom_point(data=stat_penumpang, aes(y=mean), color="red")

DENGAN FUNGSI STAT_()

Namun, bila menggunakan fungsi stat_() maka line code bisa semakin ringkas
df3 %>% 
  ggplot(aes(x=bulan, y=penumpang))+
  geom_point(alpha = 0.5)+
  stat_summary(fun.data = mean_se, geom = "errorbar", color = "blue")+
  stat_summary(fun.data = mean_se, geom = "point", color = "red")

(3) GEOMETRIES

Column {data-width = “200”}

MACAM-MACAM GRAFIK PADA GGPLOT

Setelah aesthetic sudah ditentukan, maka selanjutnya adalah pemilihan model grafik yang tepat. Dalam pemilihan ini perlu sekali diperhatikan data struktur yang membentuknya, karena ini akan sangat terkait dengan model grafik yang akan dibuat. Berikut adalah beberapa model dasar grafik yang bisa dipakai dalam memvisualisasikan data.

BARPLOT

Sering disebut dengan grafik batang

df2 %>% 
  pivot_longer(cols = -tahun) %>% 
  select(tahun, bulan = name, penumpang = value) %>% 
  mutate(bulan = factor(bulan, 
  levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
             "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) %>% 
  ggplot(aes(x=bulan, y=penumpang, fill = tahun))+
  geom_col(position = "dodge")
  

LINE PLOT

Grafik ini cocok dipakai bila parameter acuannya dalam bentuk waktu

df3 %>% 
  group_by(tahun) %>% 
  mutate(total = cumsum(penumpang)) %>%
  ggplot(aes(x=bulan, y=total, group = tahun))+
  geom_line(aes(color = tahun), linewidth = 1)+
  scale_y_continuous(transform = "log10")+
  scale_color_brewer(palette = "Paired")+
  ylab("Kumulatif Jumlah Penumpang")
  

HEATMAP

Untuk pengamatan yang singkat dan tidak mendetail, umumnya disajikan grafik dalam bentuk heatmap

df3 %>% 
  ggplot(aes(x=bulan, y=tahun, fill = penumpang))+
  geom_tile()+
  scale_fill_gradient(low = "lightblue", high = "darkblue")

STEP PLOT

Menggambarkan perubahan parameter terhadap hasil sebelumnya sehingga mudah dalam mengamati pergerakan nilainya.

df3 %>% 
  filter(tahun %in% c(1949,1960, 1954)) %>% 
  ggplot(aes(x=bulan, y=penumpang, group = tahun, color = tahun))+
  geom_step(direction = "vh", linewidth = 1)+
  ylab("Jumlah Penumpang")

Column

BAR PLOT

LINE PLOT

HEATMAP

STEP PLOT

(2) AESTHETIC

Column

AESTHETIC ATRIBUTES

Aesthetic adalah atribut pada grafik yang merepresentasikan sebuah data menjadi sesuatu yang dapat diukur/dibandingkan (quantifiable). Beberapa cakupan aesthetic pada ggplot sebagai berikut:

aestetik
aestetik
df2 %>% 
  pivot_longer(cols = -tahun) %>% 
  select(tahun, bulan = name, penumpang = value) %>% 
  mutate(bulan = factor(bulan, levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                                          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) %>% 
  ggplot(aes(x=bulan, y=penumpang, fill = tahun))+
  geom_col(position = "dodge")

datashape <- df2 %>% 
  pivot_longer(cols = -tahun) %>% 
  select(tahun, bulan = name, penumpang = value) %>% 
  mutate(bulan = factor(bulan, levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                                          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) %>%
  filter(bulan %in% c("Feb","Jul"))


df2 %>% 
  pivot_longer(cols = -tahun) %>% 
  select(tahun, bulan = name, penumpang = value) %>% 
  mutate(bulan = factor(bulan, levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                                          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))) %>% 
  ggplot(aes(x=bulan, y=penumpang, group=tahun))+
  geom_line(color = "grey70")+
  geom_point(data = datashape, aes(fill = tahun, shape = bulan, color=bulan), size = 5)+
  geom_text(data = datashape %>% filter(bulan == "Jul"), aes(x=bulan, label = tahun), 
            nudge_x = 0.7, size = 3)+
  guides(fill = FALSE)

(1) DATA STRUCTURE

Column

DATASET AWAL

Sebelum membuat grafik, kita harus perhatikan terlebih dahulu struktur datanya, apakah sudah sesuai dengan grafik yang hendak kita buat atau belum?

Bila belum sesuai, maka harus direstruktur terlebih dahulu agar grafik dapat sesuai dengan yang kita rancang.

Penumpang Pesawat Terbang
1949-1960
tahun Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949 112 118 132 129 121 135 148 148 136 119 104 118
1950 115 126 141 135 125 149 170 170 158 133 114 140
1951 145 150 178 163 172 178 199 199 184 162 146 166
1952 171 180 193 181 183 218 230 242 209 191 172 194
1953 196 196 236 235 229 243 264 272 237 211 180 201
1954 204 188 235 227 234 264 302 293 259 229 203 229
1955 242 233 267 269 270 315 364 347 312 274 237 278
1956 284 277 317 313 318 374 413 405 355 306 271 306
1957 315 301 356 348 355 422 465 467 404 347 305 336
1958 340 318 362 348 363 435 491 505 404 359 310 337
1959 360 342 406 396 420 472 548 559 463 407 362 405
1960 417 391 419 461 472 535 622 606 508 461 390 432

DATA RESTRUCTURE

Untuk itu kamu harus membuat data setnya menjadi tiga kolom, yaitu kolom “tahun”, kolom “bulan” dan kolom “penumpang”. Caranya adalah dengan menggunakan function pivot_longer() agar parameter “bulan” berada pada kolom yang sama.

Dari sini, barulah data set tersebut dapat diolah menjadi grafik yang kita inginkan.

gt(df3) %>% 
  tab_header(title = md('Penumpang Pesawat Terbang'),
                 subtitle = md('1949-1960')) %>% 
  opt_table_font(font = list(google_font('Chivo'), default_fonts())) %>% 
  tab_style(location = cells_column_labels(columns = everything()),
                style = list(cell_borders(sides = 'bottom', 
                                          weight = px(2)), 
                             cell_text(weight = 'bold'))) %>% 
  tab_options(table.font.size = px(18),
                  table.border.top.style = 'none',
                  column_labels.border.bottom.width = 2,
                  table_body.border.top.style = 'none',
                  data_row.padding = px(3))
Penumpang Pesawat Terbang
1949-1960
tahun bulan penumpang
1949 Jan 112
1949 Feb 118
1949 Mar 132
1949 Apr 129
1949 May 121
1949 Jun 135
1949 Jul 148
1949 Aug 148
1949 Sep 136
1949 Oct 119
1949 Nov 104
1949 Dec 118
1950 Jan 115
1950 Feb 126
1950 Mar 141
1950 Apr 135
1950 May 125
1950 Jun 149
1950 Jul 170
1950 Aug 170
1950 Sep 158
1950 Oct 133
1950 Nov 114
1950 Dec 140
1951 Jan 145
1951 Feb 150
1951 Mar 178
1951 Apr 163
1951 May 172
1951 Jun 178
1951 Jul 199
1951 Aug 199
1951 Sep 184
1951 Oct 162
1951 Nov 146
1951 Dec 166
1952 Jan 171
1952 Feb 180
1952 Mar 193
1952 Apr 181
1952 May 183
1952 Jun 218
1952 Jul 230
1952 Aug 242
1952 Sep 209
1952 Oct 191
1952 Nov 172
1952 Dec 194
1953 Jan 196
1953 Feb 196
1953 Mar 236
1953 Apr 235
1953 May 229
1953 Jun 243
1953 Jul 264
1953 Aug 272
1953 Sep 237
1953 Oct 211
1953 Nov 180
1953 Dec 201
1954 Jan 204
1954 Feb 188
1954 Mar 235
1954 Apr 227
1954 May 234
1954 Jun 264
1954 Jul 302
1954 Aug 293
1954 Sep 259
1954 Oct 229
1954 Nov 203
1954 Dec 229
1955 Jan 242
1955 Feb 233
1955 Mar 267
1955 Apr 269
1955 May 270
1955 Jun 315
1955 Jul 364
1955 Aug 347
1955 Sep 312
1955 Oct 274
1955 Nov 237
1955 Dec 278
1956 Jan 284
1956 Feb 277
1956 Mar 317
1956 Apr 313
1956 May 318
1956 Jun 374
1956 Jul 413
1956 Aug 405
1956 Sep 355
1956 Oct 306
1956 Nov 271
1956 Dec 306
1957 Jan 315
1957 Feb 301
1957 Mar 356
1957 Apr 348
1957 May 355
1957 Jun 422
1957 Jul 465
1957 Aug 467
1957 Sep 404
1957 Oct 347
1957 Nov 305
1957 Dec 336
1958 Jan 340
1958 Feb 318
1958 Mar 362
1958 Apr 348
1958 May 363
1958 Jun 435
1958 Jul 491
1958 Aug 505
1958 Sep 404
1958 Oct 359
1958 Nov 310
1958 Dec 337
1959 Jan 360
1959 Feb 342
1959 Mar 406
1959 Apr 396
1959 May 420
1959 Jun 472
1959 Jul 548
1959 Aug 559
1959 Sep 463
1959 Oct 407
1959 Nov 362
1959 Dec 405
1960 Jan 417
1960 Feb 391
1960 Mar 419
1960 Apr 461
1960 May 472
1960 Jun 535
1960 Jul 622
1960 Aug 606
1960 Sep 508
1960 Oct 461
1960 Nov 390
1960 Dec 432

Column

GRAFIK RANCANGAN